package cn.tedu.api;
//测试 Object 工具类
//总结
//1 什么时候要重写Object的toString()--想要查看对象的属性值而不是地址值时
//2 什么时候要重写Object的equals()----想要比较对象的属性值而不是地址值时

import java.util.Objects;

//测试 Object工具类
//boolean equals(Object obj) 指示其他某个对象是否与此对象“相等”。
//总结
//1, 什么时候要重写Object提供的toString() -- 想要查看属性值而不是地址值时
public class Test1_Object {
    public static void main(String[] args) {
        System.out.println(1);
        Student s2= new Student("张三",20);
        System.out.println(s2.name);
        Student s =new Student("张三",20);
        //2.1现在的比较s和s2不相等？---默认使用了Object里的equals()
        //2.2 Object的equals()默认使用了==比较
        //== 比较基本类型时，比较本身。。。比较引用类型时，比地址值。
        //2.3 想让equals()比较时不比地址值，而是比属性值。。
        //如果属性都一样，就让equals()相等，结果返回true。
        System.out.println(s.equals(s2));
        System.out.println(s.name);
        System.out.println(s.age);
        System.out.println(s);
        //1.3, 现在展示的是地址值 -> 想 查看属性的值
        //1.4, 默认调用了Object的toString() -> 展示地址值:cn.tedu.api.Student@28d93b30
        //1.5, 想改就,继承Object重写toString() -> 展示属性值: Student{name='渣渣辉', age=20}

    }
}
class Student{
    String name;
    int age;
    public Student(){}
    public Student(String name,int age){
        this.name = name;
        this.age = age;
    }
    //重写toString()---方法声明和父类一样，有足够的权限
    //什么时候重写toString？想要查看对象的属性值。只看对象地址值不需要重写。
    //TODO 右键 ---generate---toString----按着ctrl多选

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
    //

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return age == student.age &&
                Objects.equals(name, student.name);
    }

//    @Override
//    public int hashCode() {
//        return Objects.hash(name, age);
//    }
}